import {
  IsInt,
  IsString,
  IsNumber,
  IsArray,
  ArrayNotEmpty,
  Min,
  IsNotEmpty,
  ValidateNested,
  IsBoolean,
  IsOptional,
} from 'class-validator';

class ProductAddDataDTOKeyword {
  /** 数量 */
  @Min(1, { message: '关键词数量至少有一个' })
  @IsInt({ message: '参数错误' })
  readonly num: number;
  /** 关键词 */
  @IsNotEmpty({ message: '关键词不能为空' })
  @IsString({ message: '参数错误' })
  readonly value: string;
}

export class ProductAddDataDTO {
  /** 主图 */
  @IsString({ message: '参数错误' })
  readonly image: string;
  /** sku 名称 */
  @IsString({ message: '参数错误' })
  readonly sku: string;
  /** 价格 */
  @IsNumber(
    {
      allowNaN: false,
      allowInfinity: false,
      maxDecimalPlaces: Number.MAX_SAFE_INTEGER,
    },
    { message: '参数错误' },
  )
  readonly price: number;
  /** 店铺名 */
  @IsNotEmpty({ message: '店铺名不能为空' })
  @IsString({ message: '参数错误' })
  readonly store: string;
  /** 产品名 */
  @IsString({ message: '参数错误' })
  readonly title: string;
  /** 关键词 */
  @ValidateNested({ each: true })
  @ArrayNotEmpty({ message: '关键词不能为空' })
  @IsArray({ message: '参数错误' })
  readonly keyword: ProductAddDataDTOKeyword[];
  /** 备注 */
  @IsString({ message: '参数错误' })
  readonly remark: string;
  @IsString({ message: '参数错误' })
  readonly boss: string;
  @IsBoolean({ message: '参数错误' })
  @IsOptional()
  readonly warn?: boolean;
  @IsString({ message: '参数错误' })
  readonly sortType: 'noStore' | 'noBoss' | 'limit';
}

export class ProductAddDTO {
  /** 每组产品个数 */
  @Min(1, { message: '一组最少1个产品' })
  @IsNumber({}, { message: '参数错误' })
  readonly groupSize: number;
  /** 每页组数 */
  @Min(1, { message: '一页内最少1组产品' })
  @IsNumber({}, { message: '参数错误' })
  readonly sheetGroup: number;
  /** 产品 */
  @ValidateNested({ each: true })
  @ArrayNotEmpty({ message: '产品不能为空' })
  @IsArray({ message: '参数错误' })
  readonly product: ProductAddDataDTO[];
}
